"Louis Schill"
from pile_optim_tp import*
def NPI(chaine):
"""
la fonction NPI resoult une expression donnée en entree sous la forme NPI en chaine de charactere
et renvoie en sortie le resultat de l'expression sous la forme d'un entier
attention chaque aperateurs et operandes doivent etre espacee d'un espace
"""
chaine=chaine.strip()
chaine=chaine.split(' ')
pile=PileOptim()
for element in chaine:
if element=="+" or element=="-" or element=="*":
operande1=pile.depiler()
operande2=pile.depiler()
#assertion pour que l'element choisi ne soit pas un operateur
assert not operande1=="+" or operande1=="-" or operande1=="*" , "expression fausse"
assert not operande2=="+" or operande2=="-" or operande2=="*" , "expression fausse"
pile.empiler(eval(str(operande2)+str(element)+str(operande1)))
else:
pile.empiler(element)
return pile.depiler()
if __name__ == '__main__':
chaine="8 8 +" #test pour different type d'expression
print(NPI(chaine))
chaine="8 10 -"
print(NPI(chaine))
chaine="4 7 + 3 *"
print(NPI(chaine))
chaine=" 8 8 * 9 + " #test avec des espaces devant et derriere l'expression
print(NPI(chaine))
chaine="3 10 2 - *"
print(NPI(chaine))
les etapes du projet
1.on transforme la chaine de caractere en tableau
2.en premier lieu je parcours la pile
3.si ce n'est pas un operateur il est empiler
4.si ca en ai un on depile deux element et on calcule et on rempile le resultat
5.quand la pile ne contient plus qu'une valeur je renvoie celle ci
ue pile contenant l'expression
l'expression en cours de calcul
la pile en cours de parcours
les difficultes lors du codage
les espaces dans la chaine de charactere
dans le NPI, les operandes et operateurs sont separer entre eux par un espace dans une chaine de caractere.
lorsque j'ai voulu les place dans une piles j'ai utiliser la fonction python split.
cependent si un espace est placer au debut ou a la fin de l'expression le code ne fonctionne plus.
j'ai donc du utiliser la fonction strip pour retirer le premier et le dernier espace de la chaine.